ヘッダーをスキップ
Oracle TimesTen In-Memory Database C開発者およびリファレンス・ガイド
リリース6.0
B25764-02
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

エラーおよびリカバリの処理

この項では、TimesTenアプリケーションで発生したエラーの検出、識別および処理について説明します。

一般的なODBCエラーを処理する関数の作成方法については、『Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド』の警告およびエラーに関する章のエラーおよび警告の取得の項を参照してください。

エラーのチェック

アプリケーションでは、コールのたびにエラーおよび警告をチェックする必要があります。これによって、開発およびデバッグ時に時間および労力が大幅に節約されます。TimesTenのインストール・メディアに含まれているデモ・プログラムには、エラー・チェックの例が含まれています。1回のコールで、複数のエラーが返される場合もあります。アプリケーションは、すべてのエラーが返されるように作成する必要があります。

エラーは、エラー番号またはtt_Err文字列のいずれかを使用して確認できます。TimesTenエラー(tt_Err文字列および関連する番号の両方)の完全なリストについては、install_dir/include/tt_errCode.hファイルを参照してください。各メッセージについては、『Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド』の警告およびエラーに関する章のエラーおよび警告のリストの項を参照してください。

標準のODBC関数をコールした後、リターン・コードを確認します。リターン・コードがSQL_SUCCESSでない場合は、ODBCエラー処理関数(SQLError関数を使用してODBC環境ハンドルで発生したエラーを取得する関数)をコールします。

例1.6

たとえば、SQLAllocConnectなどの標準のODBC関数をコールした後、リターン・コードがSQL_SUCCESSであるかどうかを確認できます。SQL_SUCCESSではない場合は、エラー処理関数をコールしてアプリケーションを終了できます。

rc = SQLAllocConnect(henv, &hdbc); 
if (rc != SQL_SUCCESS) { 
  handleError(rc, henv, hdbc, hstmt, err_buf, &native_error); 
  fprintf(stderr,  
          "Unable to allocate a connection handle:\n%s\n", 
          err_buf); 
  TerminateGracefully(1); 
} 
 

エラー処理関数では、エラー・スタックからすべてのエラーが読み取られるまでSQLError関数を繰り返しコールして、常に複数のエラーをチェックします(SQLErrorから返されるリターン・コードは SQL_NO_DATA_FOUNDです)。一般的なODBCエラーを処理する関数の作成方法については、『Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド』の警告およびエラーに関する章のエラーおよび警告の取得の項を参照してください。

致命的なエラーおよび致命的ではないエラー

TimesTenでは、致命的なエラーまたは致命的でないエラーのいずれかが返される場合があります。

致命的なエラー

致命的なエラーとは、リカバリするまでデータ・ストアにアクセスできなくなるエラーのことです。致命的なエラーが発生すると、すべてのデータ・ストアの接続を切断する必要があります。それ以後の処理は完了されません。致命的なエラーは、TimesTenのエラー・コード846および994で示されます。これらのエラーの処理は、標準的なエラーの処理とは異なります。具体的には、データ・ストアの接続を切断するコードを含める必要があります。

致命的ではないエラー

致命的ではないエラーには、一意制約に違反しているINSERTなどの単純なエラーが含まれます。また、一部のアプリケーション障害およびプロセス障害も、致命的ではないエラーに含まれます。

TimesTenでは、致命的ではないエラーも、通常のエラー処理プロセスによって返されます。また、エラーの検出および識別はアプリケーションで行う必要があります。

致命的ではないエラーによってデータ・ストアに影響が出た場合、エラーが返されることがあり、アプリケーションで適切に対処する必要があります。プロセス障害などの場合、エラーは返されませんが、失敗したプロセスのトランザクションが自動的にロールバックされます。

アプリケーションでは、その処理を変更するか、または障害が発生した1つ以上のトランザクションをロールバックすることによって、致命的ではないエラーに対処できます。

警告

予期しない状態が発生した場合、TimesTenは警告を返します。たとえば、次の状況が発生した場合、TimesTenは警告を発行します。

リカバリ

致命的なエラーが発生した場合、TimesTenは、次の完全なクリーンアップおよびリカバリ・プロシージャを実行します。